TiDB Cloudへのデータインポート方法をまとめて実際にやってみた

TiDB Cloudへのデータインポート方法をまとめて実際にやってみた

Clock Icon2024.07.02

こんにちは、ゲームソリューション部のsoraです。
今回は、TiDB Cloudへのデータインポート方法をまとめて実際にやってみたことについて書いていきます。

インポート方法

CSVファイルをインポートする方法として、以下4種類を挙げます。
今回はCSVファイルを対象として、移行ではなくあくまでデータのインポートに絞っています。

  • ローカルファイルのインポート
  • S3(Google CloudだとGCS)からのインポート
  • tidb-lightnigツールでのインポート
  • LOAD DATA LOCAL INFILEでのインポート

基本的にはファイルサイズの制限が「S3からのインポート」か「tidb-lightnigツールでのインポート」が良いと思います。

ローカルファイルのインポート

TiDB Cloudの画面でローカルファイルをドラッグアンドドロップでインポートする方法です。
Serverlessクラスタのみで利用可能な方法です。
1ファイルごとの実行で、1ファイルのサイズは50MiBの制限あります。
事前準備が不要なため一番手軽です。

S3経由でインポート

TiDB Cloudの画面でS3バケットとIAMロール(またはアクセスキー)を指定してインポートする方法です。
DedicatedクラスタとServerlessクラスタのどちらでも使用可能です。
複数ファイルをまとめてインポートすることも可能です。

TiDB Lightningでのインポート

TiDB Lightningとは、TiDBへデータインポートするためのツールです。
EC2などにTiDB Lightningをインストールして使用します。
複数のファイルをまとめてインポート可能です。
インストールが必要なものの、S3経由の場合と違ってIAMロールやアクセスキーなどは不要なため、人によっては使いやすい場合もあると思います。
弊社にもやってみたブログがあるので、詳細はそちらをご確認ください。
https://dev.classmethod.jp/articles/import-csv-with-tidb-lightning/

LOAD DATA LOCAL INFILEなどでのインポート

TiDB CloudはMySQL互換であり、LOAD DATA LOCAL INFILEが使えるため、こちらを使用してもインポート可能です。
その他のSQLについて、TiDB CloudのDedicatedとServerlessで使用できるSQLが異なるため、詳細は以下をご確認ください。
https://docs.pingcap.com/ja/tidbcloud/limited-sql-features

やってみた

今回は、ローカルファイルのインポートとS3経由でインポートを実際にやってみます。
インポートするデータについては、生成AIに投げて、データ項目を含めたデータ作成のためのPythonコードを生成し、そちらを実行して作成しました。

生成したCSVファイルは以下のようなものです。

商品ID,商品名,カテゴリ,価格,在庫数,説明,発売日
I50nivmx9G,VwkyhWN4rLsTOfM,Electronics,764.61,166,HhpgUyeXD8OYVxLfoOyxK4y3nyXvH0hHgW9ZPEvq2cVMNgdvJFOQgydaZJOs1irGAXEzmpefyXO4Cwsy8Y9,2012-12-30
………

ローカルファイルをアップロードしてインポート

TiDB Cloud上のImportにて、ローカルファイルをドラッグアンドドロップして、インポート先のデータベースとテーブルを指定することでインポートできます。

sr-tidbcloud-import-01
sr-tidbcloud-import-02
sr-tidbcloud-import-03
sr-tidbcloud-import-04
sr-tidbcloud-import-05
事前準備も知識も不要なため、手軽にインポートすることができました。
ちなみに、50MiBを超えた256MBのデータをインポートするために、ドラッグアンドドロップしてみるとエラーが出ることも確認できました。
sr-tidbcloud-import-06

S3経由でのインポート

S3バケットとIAMロールの作成

事前準備としてインポート元のS3バケットとIAMロール(アクセスキーでも可能)を作成します。
TiDB CloudのアカウントIDと外部IDは、TiDB CloudのCreate Importから確認できます。

AWS上でのS3バケットを作成してファイルを配置、IAMロールの作成をするだけのため、今回は省略します。
手順は以下をご確認ください。
https://docs.pingcap.com/ja/tidbcloud/config-s3-and-gcs-access#configure-amazon-s3-access

スキーマファイルの作成

CSVファイルにはスキーマ情報が含まれていないため、事前にTiDB Cloudでデータベースとテーブルを作成しておくか、インポート元のS3バケットにスキーマファイルを作成します。
今回は、スキーマファイルを作成する方法でやってみます。

まずインポートするCSVファイルについて、以下を参考にファイル名を修正します。
https://docs.pingcap.com/ja/tidbcloud/import-csv-files
今回は、テーブル全体の全てのデータが含まれているCSVファイルのため、${db_name}.${table_name}.csvの形式で、test_item.items.csvと名付けます。
複数ファイルある場合は、test_item.items.01.csvtest_item.items.02.csvのように番号を割り振ります。
ちなみに圧縮ファイルもサポートしているため、zipファイルなども可能です。

データインポート時にデータベースとテーブルを作成するために、sqlファイルを作成してCSVファイルと同じバケットに配置します。

test_item-scehma-create.sql
CREATE DATABASE test_item;
test_item.items-schema.sql
CREATE TABLE items (
    商品id VARCHAR(10) NOT NULL,
    商品名 VARCHAR(15) NOT NULL,
    カテゴリ VARCHAR(255) NOT NULL,
    価格 DECIMAL(10, 2) NOT NULL,
    在庫数 INT NOT NULL,
    説明 VARCHAR(100) NOT NULL,
    発売日 DATE NOT NULL,
    PRIMARY KEY (商品id)
);

TiDB Cloudへのインポート

その後、TiDB Cloud上のImportにて、S3バケットとIAMロールを指定してインポートします。
sr-tidbcloud-import-07
sr-tidbcloud-import-08

インポートできていることが確認できました。
sr-tidbcloud-import-09

参考

https://docs.pingcap.com/ja/tidbcloud/tidb-cloud-import-local-files
https://docs.pingcap.com/ja/tidbcloud/import-csv-files

最後に

今回は、TiDB Cloudへのデータインポート方法をまとめて実際にやってみたことを記事にしました。
どなたかの参考になると幸いです。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.